'use strict';
const db = uniCloud.database();

exports.main = async (event, context) => {
  // 解构事件参数
  const {
    userId,      // 用户ID
    avatar,      // 新头像URL
    username     // 新用户名
  } = event

  try {
    // 1. 验证用户是否存在
    const userRecord = await db.collection('user')
      .doc(userId)
      .get()

    if (!userRecord.data) {
      return {
        code: 404,
        msg: '用户不存在',
        data: null
      }
    }

    // 2. 构建更新数据
    const updateData = {
      avatar: avatar || userRecord.data.avatar, // 保留原头像如果没有新值
      username: username || userRecord.data.username,
      updateTime: formatDate(Date.now())// 使用服务端时间
    }

    // 3. 执行更新操作
    const updateRes = await db.collection('user')
      .doc(userId)
      .update(updateData)

    // 4. 返回更新后的完整用户数据
    const updatedUser = await db.collection('user')
      .doc(userId)
      .get()

    return {
      code: 200,
      msg: '更新成功',
      data: {
        ...updatedUser.data,
        // 添加计算字段
        danLevel: calculateDanLevel(updatedUser.data.score),
        // 格式化时间
        updateTime: formatDate(Date.now())
      }
    }
  } catch (err) {
    console.error('更新用户失败:', err)
    return {
      code: 500,
      msg: `更新失败: ${err.message}`,
      data: null
    }
  }
}

// 段位计算函数（与前端保持一致）
function calculateDanLevel(score) {
  if (score >= 5000) return 4
  if (score >= 2000) return 3
  if (score >= 500) return 2
  if (score >= 100) return 1
  return 0
}

function formatDate(timestamp, format = 'YYYY-MM-DD HH:mm:ss') {
  const date = new Date(timestamp);
  
  const pad = (n) => n.toString().padStart(2, '0');
  
  const replacements = {
    YYYY: date.getFullYear(),
    MM: pad(date.getMonth() + 1),    // 月份从0开始需+1
    DD: pad(date.getDate()),
    HH: pad(date.getHours()),
    mm: pad(date.getMinutes()),
    ss: pad(date.getSeconds()),
    SSS: pad(date.getMilliseconds(), 3)
  };

  return format.replace(/YYYY|MM|DD|HH|mm|ss|SSS/g, match => replacements[match]);
}